package model;

import java.util.Calendar;
import java.util.Date;

import junit.framework.TestCase;

public class DatumTest extends TestCase{

	private static final int tagSummand = 5;

	private static Datum date;
	
	private static final Calendar cal = Calendar.getInstance();
	private static final int jahr = cal.get(Calendar.YEAR);
	private static final int monat = cal.get(Calendar.MONTH) +1;
	private static final int tag = cal.get(Calendar.DAY_OF_MONTH);
	
	
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		date = new Datum(jahr,monat,tag);
	}
	
/*
 * tests for constructors
 */
	public void testConstructorEmpty() {
		Datum datum = new Datum();
		assertEquals(jahr,datum.jahr);
		assertEquals(monat,datum.monat);
		assertEquals(tag,datum.tag);
	}
	
	public void testConstructorDate(){
		Datum datum = new Datum(new Date());
		assertEquals(jahr,datum.jahr);
		assertEquals(monat,datum.monat);
		assertEquals(tag,datum.tag);
		
	}
	
	public void testConstructorInts(){
		Datum datum = new Datum(jahr,monat,tag);
		assertEquals(jahr,datum.jahr);
		assertEquals(monat,datum.monat);
		assertEquals(tag,datum.tag);
	}
	
	
	
/*
 * tests for methods
 */
	public void testLiegtVorDatum(){
		Datum datum = new Datum(jahr - 3, monat, tag);
		assertEquals(false, date.liegtVor(datum));
		
		datum = new Datum(jahr, monat-1, tag);
		assertEquals(false, date.liegtVor(datum));
		
		datum = new Datum(jahr, monat, tag-1);
		assertEquals(false, date.liegtVor(datum));
		
		datum = new Datum(jahr + 3, monat, tag);
		assertEquals(true, date.liegtVor(datum));
		
		datum = new Datum(jahr , monat+1, tag);
		assertEquals(true, date.liegtVor(datum));
		
		datum = new Datum(jahr, monat, tag+1);
		assertEquals(true, date.liegtVor(datum));
		
		datum = new Datum(jahr, monat, tag);
		assertEquals(false, date.liegtVor(datum));
	}
	
	public void testLiegtVorDate(){
		Date datum = new Date(System.currentTimeMillis());
		assertEquals(false, date.liegtVor(datum));
		
		datum = new Date(System.currentTimeMillis()- 3*(24*60*60*1000L) );
		assertEquals(false, date.liegtVor(datum));
		
		datum = new Date(System.currentTimeMillis()+ (24*60*60*1000L) );
		assertEquals(true, date.liegtVor(datum));
		
	}
	
	public void testAddiereTage(){
		Calendar newCal = Calendar.getInstance();
		newCal.set(jahr, monat-1, tag + tagSummand);
		
		date.addiereTage(tagSummand);
		
		assertEquals(newCal.get(Calendar.YEAR),date.jahr);
		assertEquals(newCal.get(Calendar.MONTH) +1 ,date.monat);
		assertEquals(newCal.get(Calendar.DAY_OF_MONTH), date.tag);
		
	}
}
